package rabbitmq;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * Created by 罗选通 on 2017/11/27.
 */
public class Customer {
  private final static String QUEUE_NAME = "rabbitMQ.test1";

  public static void main(String[] args) throws IOException, TimeoutException {
// 创建连接工厂
    ConnectionFactory factory = new ConnectionFactory();
    //设置RabbitMQ地址
    factory.setHost("localhost");
    factory.setUsername("admin");
    factory.setPassword("123456");
    //创建一个新的连接
    Connection connection = factory.newConnection();
    //创建一个通道
    Channel channel = connection.createChannel();
    //声明要关注的队列
    channel.queueDeclare(QUEUE_NAME, false, false, true, null);
    System.out.println("Customer Waiting Received messages");
    //DefaultConsumer类实现了Consumer接口，通过传入一个频道，
    // 告诉服务器我们需要那个频道的消息，如果频道中有消息，就会执行回调函数handleDelivery
    Consumer consumer = new DefaultConsumer(channel) {
      @Override
      public void handleDelivery(String consumerTag, Envelope envelope,
                                 AMQP.BasicProperties properties, byte[] body)
              throws IOException {
        String message = new String(body, "UTF-8");
        System.out.println("Customer Received '" + message + "'");
      }
    };
    //自动回复队列应答 -- RabbitMQ中的消息确认机制
    channel.basicConsume(QUEUE_NAME, true, consumer);
  }
}
